#include "Salida.h"

Salida::Salida(int id, Semaforo *lectura, Semaforo *escritura) {
	this->id = id;
	this->salidaDeAutos = new Fifo(Utils::NOMBRE_ARCHIVO_SALIDA);
	this->semaforoLectura = lectura;
	this->semaforoEscritura = escritura;
	this->simulacionHandler = new SimulacionHandler();
	SignalHandler::getInstance()->registrarHandler(SIGINT,
			this->simulacionHandler);
}

void Salida::iniciar() {
	while (this->simulacionHandler->getGracefulQuit() == 0) {
		Auto autoEntrando;
		this->semaforoLectura->p();
		if (this->simulacionHandler->getGracefulQuit() == 0) {
			//cout << "La Salida : " << getId()
			//	<< " esta esperando el ingreso de un auto" << endl;
			int resultado = this->salidaDeAutos->leer((char*) &autoEntrando,
					sizeof(Auto));
			if (resultado == 0) {
				cout << "Error al leer en Salida: " << this->getId() << endl;
			}
		}
		this->semaforoEscritura->v();
	}
	cout << "Salida " << getId() << " termina simulacion" << endl;
	this->salidaDeAutos->cerrar();
}

int Salida::getId() {
	return this->id;
}

Salida::~Salida() {
	this->salidaDeAutos->cerrar();
	delete this->salidaDeAutos;
}
